package com.ruoyi.user.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.user.mapper.UsersMapper;
import com.ruoyi.user.domain.Users;
import com.ruoyi.user.service.IUsersService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.StringUtils;

/**
 * 用户Service业务层处理
 *
 * @author ruoyi
 * @date 2025-10-21
 */
@Service
public class UsersServiceImpl implements IUsersService
{
    @Autowired
    private UsersMapper usersMapper;

    @Autowired
    private ISysUserService sysUserService;

    /**
     * 查询用户
     *
     * @param customerId 用户主键
     * @return 用户
     */
    @Override
    public Users selectUsersByCustomerId(Long customerId)
    {
        return usersMapper.selectUsersByCustomerId(customerId);
    }

    /**
     * 查询用户列表
     *
     * @param users 用户
     * @return 用户
     */
    @Override
    public List<Users> selectUsersList(Users users)
    {
        return usersMapper.selectUsersList(users);
    }

    /**
     * 新增用户
     *
     * @param users 用户
     * @return 结果
     */
    @Override
    public int insertUsers(Users users)
    {
        return usersMapper.insertUsers(users);
    }

    /**
     * 修改用户
     *
     * @param users 用户
     * @return 结果
     */
    @Override
    public int updateUsers(Users users)
    {
        return usersMapper.updateUsers(users);
    }

    /**
     * 批量删除用户
     *
     * @param customerIds 需要删除的数据主键集合
     * @return 结果
     */
    @Override
    public int deleteUsersByCustomerIds(Long[] customerIds)
    {
        return usersMapper.deleteUsersByCustomerIds(customerIds);
    }

    /**
     * 删除用户信息
     *
     * @param customerId 用户主键
     * @return 结果
     */
    @Override
    public int deleteUsersByCustomerId(Long customerId)
    {
        return usersMapper.deleteUsersByCustomerId(customerId);
    }

    /**
     * 根据用户ID查询用户个人资料（不包含敏感信息）
     *
     * @param customerId 用户主键
     * @return 用户个人资料
     */
    @Override
    public Users selectUserProfileByCustomerId(Long customerId)
    {
        return usersMapper.selectUserProfileByCustomerId(customerId);
    }

    /**
     * 更新用户个人资料（只更新允许的字段）
     * 同时更新users表和sys_user表
     *
     * @param users 用户信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateUserProfile(Users users)
    {
        // 1. 更新users表
        int result = usersMapper.updateUserProfile(users);

        if (result > 0 && users.getUserId() != null) {
            // 2. 查询对应的sys_user记录
            SysUser sysUser = sysUserService.selectUserById(users.getUserId());
            if (sysUser != null) {
                // 3. 转换并更新sys_user表中的对应字段
                boolean needUpdate = false;

                // 更新昵称
                if (StringUtils.isNotEmpty(users.getNickname())) {
                    sysUser.setNickName(users.getNickname());
                    needUpdate = true;
                }

                // 更新头像
                if (StringUtils.isNotEmpty(users.getAvatarUrl())) {
                    sysUser.setAvatar(users.getAvatarUrl());
                    needUpdate = true;
                }

                // 更新手机号
                if (StringUtils.isNotEmpty(users.getPhoneNumber())) {
                    sysUser.setPhonenumber(users.getPhoneNumber());
                    // 同时将用户名更新为手机号
                    sysUser.setUserName(users.getPhoneNumber());
                    needUpdate = true;
                }

                // 更新性别（转换格式：Integer -> String）
                if (users.getGender() != null) {
                    sysUser.setSex(String.valueOf(users.getGender()));
                    needUpdate = true;
                }

                // 如果有字段需要更新，则更新sys_user表
                if (needUpdate) {
                    sysUserService.updateUser(sysUser);
                }
            }
        }

        return result;
    }
}
